package com.ngc.mall.service.impl;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ngc.mall.bo.OrderSku;
import com.ngc.mall.bo.Spec;
import com.ngc.mall.common.configure.mybatisPlus.BaseServiceImpl;
import com.ngc.mall.domain.SkuDomain;
import com.ngc.mall.domain.SkuSpecDomain;
import com.ngc.mall.dto.SkuDTO;
import com.ngc.mall.mapper.SkuMapper;
import com.ngc.mall.service.ISkuService;
import com.ngc.mall.service.ISkuSpecService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@Service
public class SkuServiceImpl extends BaseServiceImpl<SkuMapper, SkuDomain> implements ISkuService {
    @Resource
    private ISkuSpecService skuSpecService;
    public Boolean createBatchBySpuId(Long spuId,List<SkuDTO> skuDTOList){
//        List<SkuDomain> skuDomainList=new ArrayList<>();
        List<SkuSpecDomain> skuSpecDomainList=new ArrayList<>();
        for(SkuDTO sku:skuDTOList){
            SkuDomain skuDomain=SkuDomain
                    .builder()
                    .img(sku.getImg())
                    .title(sku.getTitle())
                    .price(sku.getPrice())
                    .stock(sku.getStock())
                    .spuId(spuId)
                    .build();
            Long skuId=super.create(skuDomain);
            for(Spec spec :sku.getSpecs()){
                SkuSpecDomain skuSpecDomain=SkuSpecDomain
                        .builder()
                        .skuId(skuId)
                        .keyId(spec.getKeyId())
                        .valueId(spec.getValueId())
                        .spuId(spuId)
                        .build();
                skuSpecDomainList.add(skuSpecDomain);
            }
            skuSpecService.saveBatch(skuSpecDomainList);
        }
        return true;
    }

    @Override
    public Long createSku(SkuDomain domain) {
        return super.create(domain);
    }

    @Override
    public List<SkuDomain> findByIdList(List<Long> skuIdList) {
        List<SkuDomain> skuDomainList=new ArrayList<>();
//        List<SkuDomain> skuDomainList=baseMapper.findSkuByIdList(skuIdList);
        for(Long id:skuIdList){
            SkuDomain skuDomain=super.getById(id);
            List<Spec> specList=baseMapper.findSpecsBySkuId(id);
            skuDomain.setSpecs(specList);
            skuDomainList.add(skuDomain);
        }
        return skuDomainList;
    }

    @Override
    public List<SkuDomain> findBySpuId(Long spuId){
        List<SkuDomain> skuDomainList=super.list(Wrappers.<SkuDomain>lambdaQuery().eq(SkuDomain::getSpuId,spuId));
        for(SkuDomain skuDomain:skuDomainList){
            List<Spec> specList=baseMapper.findSpecsBySkuId(skuDomain.getId());
            skuDomain.setSpecs(specList);
        }
        return skuDomainList;
    }

    @Override
    public void recoverStock(OrderSku orderSku) {
        Boolean result=baseMapper.recoverStock(orderSku.getId(),orderSku.getCount());
        if(!result){
            System.out.println("减少库存失败");///应该抛出内部错误，
        }
    }

    @Override
    public Boolean reduceSkuStock(Long id,Integer count){
        return baseMapper.reduceSkuStock(id,count);
    }

}
